package gdr.battle.core;

import gdr.battle.data.*;
import gdr.dev.SuperGDR9000;
import gdr.battle.ia.*;
import com.golden.gamedev.object.Timer;



public class CPUClient extends Client{
	protected DumbestIA ia;
	
	public CPUClient(SuperGDR9000 gdr){
		super(gdr);
	}
	
	public void init(){
		super.setVisible(false);
		super.setNeedRefresh(true);
		super.setFocused(false);
		
		super.setDefaultIsFocused(false);
		super.setDefaultIsVisible(true);
		super.setDefaultNeedRefresh(false);
	}
	
	Timer tt = new Timer(10);
	boolean done = false;
	boolean execMove = true;
	boolean execAction = true;
	/**
	 * Aggiorna lo stato delle animazioni
	 * @param elapsedTime
	 */
	public void updateWindow(long elapsedTime){
		if (!container.getManager().isActiveTeam(clientTeam) || !tt.action(elapsedTime))
			return;
		try{
			switch (container.getData().getStatoScontro()){
				case INIZIALIZZAZIONE_TURNO:
					done = false;
					execMove = true;
					execAction = true;
					getContainer().getManager().updateGameState(getClientTeam(), StatoScontro.ATTESA_AZIONI);
					break;
				case ATTESA_AZIONI: 
					if (!done){
						done = true;
						//(new Thread(ia)).start();
						ia.buildStrategy();
					}
					if (execMove){
						getContainer().getManager().updateGameState(getClientTeam(), StatoScontro.ESECUZIONE_MOVE);
						execMove = false;
						break;
					}
					if (execAction && !execMove){
						getContainer().getManager().updateGameState(getClientTeam(), StatoScontro.ESECUZIONE_AZIONI);
						execAction = false;
						break;
					}
					if (!execAction && !execMove)
						getContainer().getManager().updateGameState(getClientTeam(), StatoScontro.TERMINA_TURNO);
					break;
				case ESECUZIONE_AZIONI:
				case ESECUZIONE_MOVE:
					break;
				case RIPRENDE_TURNO:
						container.getManager().updateGameState(getClientTeam(), StatoScontro.ATTESA_AZIONI);
					break;
				case TERMINA_TURNO:
						container.getManager().updateGameState(getClientTeam(), StatoScontro.TERMINA_TURNO);
					break;
			default:
				break;
			}
		}catch(Exception e){}
	}

	public DumbestIA getIa() {
		return ia;
	}

	public void setIa(DumbestIA ia) {
		this.ia = ia;
	}	
}
